package com.skymxc.wandroidtodo.data.net;

import com.skymxc.wandroidtodo.entity.NetResponse;
import com.skymxc.wandroidtodo.entity.PageResult;
import com.skymxc.wandroidtodo.entity.TODOItem;
import com.skymxc.wandroidtodo.entity.UserInfo;

import java.util.List;

import io.reactivex.Observable;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;

/**
 * <p>
 *
 * </p>
 *
 * @author 孟祥超
 * <p>
 * date: 2021/12/1  7:23 上午
 */
public interface APIService {

    @POST("user/login")
    Observable<NetResponse<UserInfo>> login(@Query("username") String username, @Query("password") String password);

    @POST("user/register")
    Observable<NetResponse<UserInfo>> register(@Query("username") String username,
                                               @Query("password") String password,
                                               @Query("repassword") String repassword);

    @POST("lg/todo/v2/list/{page}/json?orderby=4")
    Observable<NetResponse<PageResult>> pageList(@Path("page") int page);

    /**
     * 添加一个 item
     *
     * @param title    新增标题（必须）
     * @param content  新增详情（必须）
     * @param date     2018-08-01 预定完成时间（不传默认当天，建议传）
     * @param type     大于0的整数（可选）；
     * @param priority 大于0的整数（可选）；
     * @return
     */
    @POST("lg/todo/add/json")
    Observable<NetResponse<TODOItem>> addItem(@Query("title") String title,
                                              @Query("content") String content,
                                              @Query("date") String date,
                                              @Query("type") int type,
                                              @Query("priority") int priority);

    /**
     * 更新一个 item
     * @param id 拼接在链接上，为唯一标识，列表数据返回时，每个todo 都会有个id标识 （必须）
     * @param title 更新标题 （必须）
     * @param content 新增详情（必须）
     * @param date 2018-08-01（必须）
     * @param status  0为未完成，1为完成
     * @return
     */
    @POST("lg/todo/update/{id}/json")
    Observable<NetResponse<TODOItem>> updateItem(@Path("id") long id,
                                                @Query("title") String title,
                                                @Query("content") String content,
                                                @Query("date") String date,
                                                @Query("status") int status);

    /**
     * 仅更新状态
     * @param id
     * @param status
     * @return
     */
   @POST("lg/todo/done/{id}/json")
    Observable<NetResponse<TODOItem>> updateItemStatus(@Path("id") long id,
                                                @Query("status") int status);

   @POST("lg/todo/delete/{id}/json")
   Observable<NetResponse> deleteItem(@Path("id")long id );


}
